package org.luckyjourney.schedul;

import org.luckyjourney.entity.video.Video;
import org.luckyjourney.entity.vo.HotVideo;

import java.util.*;

/**
*
 * @description:
 * @Author: Xhy
 * @CreateTime: 2023-11-04 17:42

*/
public class TopK {

    private int k = 0;  //存储的热度最高的视频数量

    private Queue<HotVideo> queue;  //用来存储热度最高的视频对象

    public TopK(int k,Queue<HotVideo> queue){
        this.k = k;
        this.queue = queue;
    }

    //向 TopK 对象中添加视频对象
    public void add(HotVideo hotVideo) {
        if (queue.size() < k) { //如果队列的大小小于 k，直接将视频对象添加到队列中
            queue.add(hotVideo);
        } else if (queue.peek().getHot() < hotVideo.getHot()){ //如果新视频的热度大于队列中最小的热度，则将队列中热度最小的视频移除，然后将新视频添加到队列中
            queue.poll();
            queue.add(hotVideo);
        }
        return;
    }

    //获取存储在 TopK 对象中的视频列表
    public List<HotVideo> get(){
        final ArrayList<HotVideo> list = new ArrayList<>(queue.size());
        while (!queue.isEmpty()) {  //每次从队列中取出一个元素
            list.add(queue.poll());  //添加到list中
        }
        Collections.reverse(list);  //将list中的元素反转 保证列表中的视频是按热度从高到低排序的
        return list;
    }


}
